﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using tracnghiem.model;


namespace tracnghiem
{
    public partial class frmCauHoi : Form
    {
        public frmCauHoi()
        {
            InitializeComponent();
        }
        ObjectFactory factory = new ObjectFactory();
        DataClassesDataContext context = new DataClassesDataContext();
        
        private void frmCauHoi_Load(object sender, EventArgs e)
        {
            //load danh sach cau hoi
            var q = from cauhois in context.CAU_HOIs
                    select cauhois;
            dtgCauHoi.DataSource = q;
            if (chkTuDong.Checked)
            {
                IObject ch = factory.makeObject(CauHoi.ToString());                
                txtMaCauHoi.Text = ch.createNewID();
                txtMaCauHoi.Enabled = false;
            }
            //load danh sach MON HOC va cboMonHoc
            cboMonHoc.Items.Clear();
            var mh = from monhocs in context.MON_HOCs
                     select monhocs;
            foreach (var i in mh)
            {
                cboMonHoc.Items.Add(i.MA_MON + " - " + i.TEN_MON);
            }
                        
        }



        private void chkTuDongChanged(object sender, EventArgs e)
        {
            IObject ch = factory.makeObject(CauHoi.ToString());
            if (chkTuDong.Checked)
            {
                txtMaCauHoi.Text = ch.createNewID();
                txtMaCauHoi.Enabled = false;
            }
            else
            {
                txtMaCauHoi.Text = "";
                txtMaCauHoi.Enabled = true;
            }
        }

        private void btnCapNhat_Click(object sender, EventArgs e)
        {
            try
            {
                if (isValidFields())
                {
                    //kiem tra xem co trung voi ma cau hoi nao khong?               
                    var q = (from cauhoi in context.CAU_HOIs
                             where cauhoi.MA_CAU_HOI.ToString() == txtMaCauHoi.Text
                             select cauhoi).Count();                    
                   
                    if (q > 0)
                    {
                        //cap nhat mon hoc
                        DialogResult dlgResult = MessageBox.Show("Bạn muốn cập nhật câu hỏi có mã : " + txtMaCauHoi.Text, "Thông báo",
                                                                MessageBoxButtons.YesNo);
                        if (dlgResult == DialogResult.Yes)
                        {
                            var cauhoi = (from cauhois in context.CAU_HOIs
                                          where cauhois.MA_CAU_HOI.ToString() == txtMaCauHoi.Text
                                          select cauhois).Single();
                            cauhoi.NOI_DUNG = txtnoiDung.Text;
                            cauhoi.DO_KHO = cboDoKho.Text;
                            cauhoi.MA_MON = cboMonHoc.Text.Split('-')[0];
                            cauhoi.TRA_LOI_1 = txtTraLoi1.Text;
                            cauhoi.TRA_LOI_2 = txtTraLoi2.Text;
                            cauhoi.TRA_LOI_3 = txtTraLoi3.Text;
                            cauhoi.TRA_LOI_4 = txtTraLoi4.Text;
                            cauhoi.DAP_AN = this.getCheck();
                            context.SubmitChanges();
                            this.refreshDataGridView();
                            txtThongBao.Text = "Cập nhật thành công";
                        }
                    }
                    else
                    {
                        //them moi mon hoc                        
                        CAU_HOI cauhoi = new CAU_HOI();
                        cauhoi.MA_CAU_HOI = Int32.Parse(txtMaCauHoi.Text);
                        cauhoi.NOI_DUNG = txtnoiDung.Text;
                        cauhoi.DO_KHO = cboDoKho.Text;
                        cauhoi.MA_MON = cboMonHoc.Text.Split('-')[0];
                        cauhoi.TRA_LOI_1 = txtTraLoi1.Text;
                        cauhoi.TRA_LOI_2 = txtTraLoi2.Text;
                        cauhoi.TRA_LOI_3 = txtTraLoi3.Text;
                        cauhoi.TRA_LOI_4 = txtTraLoi4.Text;
                        cauhoi.DAP_AN = this.getCheck();
                        context.GetTable<CAU_HOI>().InsertOnSubmit(cauhoi);
                        context.SubmitChanges();
                        //cap nhat tren dtgMonHoc
                        this.refreshDataGridView();
                        txtThongBao.Text = "Thêm mới thành công";                        
                    }
                    
                   
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Loi: " + ex.Message);
            }
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnHuy_Click(object sender, EventArgs e)
        {
            IObject ch = factory.makeObject(CauHoi.ToString());
            txtMaCauHoi.Text = ch.createNewID();
            txtnoiDung.Text = "";
            txtTraLoi1.Text = "";
            txtTraLoi2.Text = "";
            txtTraLoi3.Text = "";
            txtTraLoi4.Text = "";
            
        }
        private bool isValidFields()
        {
            if (txtMaCauHoi.Text == "")
            {
                MessageBox.Show("Mã câu hỏi không được trống");
                return false;
            }
            if (txtnoiDung.Text == "")
            {
                MessageBox.Show("Nội dung câu hỏi không được trống");
                return false;
            }
            if (cboMonHoc.Text == "")
            {
                MessageBox.Show("Chọn môn học cho câu hỏi");
                return false;
            }
            if (cboDoKho.Text == "")
            {
                MessageBox.Show("Chọn độ khó cho câu hỏi");
                return false;
            }
            if (txtTraLoi1.Text == "" || txtTraLoi2.Text == "" || txtTraLoi3.Text == "" || txtTraLoi4.Text == "")
            {
                MessageBox.Show("Trả lời câu hỏi không được trống");
                return false;
            }            
            return true;
        }

        private void dtgCauHoiOnCellClick(object sender, DataGridViewCellEventArgs e)
        {
            //hien thi cau hoi duoc chon trong dtgCauHoi len khung cap nhat
            int row_index = e.RowIndex;
            if (row_index >= 0)
            {
                txtMaCauHoi.Text = dtgCauHoi["MA_CAU_HOI", row_index].Value.ToString();
                txtnoiDung.Text = (string)dtgCauHoi["NOI_DUNG", row_index].Value;
                cboDoKho.Text = (string)dtgCauHoi["DO_KHO", row_index].Value;
                
                //lay ten mon hoc tu mamon
                var mh = (from monhocs in context.MON_HOCs
                          where monhocs.MA_MON == (string)dtgCauHoi["MA_MON", row_index].Value
                          select monhocs).Single();
                cboMonHoc.Text = mh.MA_MON + " - " + mh.TEN_MON;
                txtTraLoi1.Text = (string)dtgCauHoi["TRA_LOI_1", row_index].Value;
                txtTraLoi2.Text = (string)dtgCauHoi["TRA_LOI_2", row_index].Value;
                txtTraLoi3.Text = (string)dtgCauHoi["TRA_LOI_3", row_index].Value;
                txtTraLoi4.Text = (string)dtgCauHoi["TRA_LOI_4", row_index].Value;
                this.setCheck((Int16) dtgCauHoi["DAP_AN", row_index].Value);
            }
        }

        private Int16 getCheck()
        {
            Int16 value = 0;
            if (rbtn1.Checked)
            {
                value = 1;
            }
            else if (rbtn2.Checked)
            {
                value = 2;
            }
            else if (rbtn3.Checked)
            {
                value = 3;
            }
            else
            {
                value = 4;
            }
            return value;
        }

        private void setCheck(Int16 value)
        {
            
            switch (value)
            {
                case 1: rbtn1.Checked = true; break;
                case 2: rbtn2.Checked = true; break;
                case 3: rbtn3.Checked = true; break;
                case 4: rbtn4.Checked = true; break;
                default: rbtn1.Checked = true; break;
            } 
            
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            var q = (from cauhoi in context.CAU_HOIs
                     where cauhoi.MA_CAU_HOI.ToString() == txtMaCauHoi.Text
                     select cauhoi).Count();
            if (q > 0)
            {
                DialogResult dlgResult = MessageBox.Show("Bạn chắc chắn muốn xóa câu hỏi có mã : " + txtMaCauHoi.Text, "Thông báo",
                                                        MessageBoxButtons.YesNo);
                if (dlgResult == DialogResult.Yes)
                {
                    var cauhoi = (from cauhois in context.CAU_HOIs
                                  where cauhois.MA_CAU_HOI.ToString() == txtMaCauHoi.Text
                                  select cauhois).Single();
                    context.CAU_HOIs.DeleteOnSubmit(cauhoi);
                    try
                    {
                        context.SubmitChanges();
                    }
                    catch (Exception ex)
                    {
                        throw new Exception("Loi: " + ex.Message);
                    }
                    
                    txtThongBao.Text = "Xóa thành công";
                    //cap nhat tren dtgCauHoi
                    this.refreshDataGridView();
                }
            }
        }

        private void refreshDataGridView()
        {
            var q = from cauhois in context.CAU_HOIs
                    select cauhois;
            dtgCauHoi.DataSource = q;
        }

    }
}
